package com.xgq.drink.service;

import com.xgq.drink.entity.Brand;
import com.xgq.drink.entity.LoginUser;
import com.xgq.drink.entity.R;
import com.xgq.drink.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;


/**
 * <p>
 *  服务类
 * </p>
 *
 * @author XuGuiQi
 * @since 2025-02-22
 */
public interface IUserService extends IService<User> {
    User GetUserByUsername(String name);
    User login(User user);
    R register(LoginUser user);
    R updateUser(User user, String code);
    // 手机号验证码登录
    User loginByPhone(String phone, String code);
    User GetUserByUserId(String id);

    /**
     * 检查用户是否具有指定角色
     * @param userId 用户ID
     * @param roleCode 角色编码
     * @return 是否具有该角色
     */
    boolean hasRole(Long userId, String roleCode);

    /**
     * 检查用户是否具有指定品牌下的指定角色
     * @param userId 用户ID
     * @param brandId 品牌ID
     * @param roleCode 角色编码
     * @return 是否具有该角色
     */
    boolean hasBrandRole(Long userId, Long brandId, String roleCode);

    /**
     * 为用户分配角色
     * @param userId 用户ID
     * @param roleId 角色ID
     * @param brandId 品牌ID（可选）
     */
    void assignRole(Long userId, Long roleId, Long brandId);

    /**
     * 移除用户的角色
     * @param userId 用户ID
     * @param roleId 角色ID
     * @param brandId 品牌ID（可选）
     */
    void removeRole(Long userId, Long roleId, Long brandId);
    public boolean validateStorePermission(String userId, Long storeId);
    List<Brand> getUserBrands(Long userId);
    Brand GetBrandByUserId(Long id);
    public Brand GetBrandByUserIdAndBrandId(Long userId, Long brandId);

    R updatePassword(String userId, String phone, String code, String newPassword);

    R updateUserInfo(User user);
}
